/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.todoterreno.beans;

import com.todoterreno.dao.GestionImagenesInter;
import com.todoterreno.dao.impl.GestionImagenesInterDao;
import com.todoterreno.datamodel.CasaVerticalDataModel;
import com.todoterreno.model.CasaTerreno;
import com.todoterreno.model.CasaTerrenoDet;
import com.todoterreno.model.CasaTerrenoVertical;
import com.todoterreno.utils.AddressConverter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;
import org.primefaces.context.RequestContext;
import org.primefaces.event.map.OverlaySelectEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;

/**
 *
 * @author davex
 */
public class GalleryBean implements Serializable{

    private String root = "/home/davidpanel/fotos/";
    private String rootDet="/home/davidpanel/detalle/";
    private List<CasaTerrenoVertical> images;
    private String codCasa;
    private String nombreCasaMapa;
    private CasaTerreno casa;
    private CasaTerrenoDet detCasa;
    private StreamedContent streamImagen;
    private StreamedContent streamImagenDet;
    private GestionImagenesInter obtImagen = new GestionImagenesInterDao();
    private CasaVerticalDataModel casaVerDataModel;
    private MapModel simpleMapModel;
    
    private String depto; 

    public GalleryBean() {
        if(depto==null){
            depto="SAN SALVADOR";
        }
        updateData();
    }
    
    public void updateData(){
        images=obtImagen.consultarPorDepto(depto);
        casaVerDataModel=new CasaVerticalDataModel(images);
        detCasa=new CasaTerrenoDet();
        casa=new CasaTerreno();
    }
    
    public void cargarImagenesDetalle() throws IOException{
        System.out.println("Entroooo");
        
        RequestContext reqCon= RequestContext.getCurrentInstance();
        System.out.println("casaParm: "+casa.getIdcasater());
        detCasa=obtImagen.consultarDetalleCasa(casa.getIdcasater());
        System.out.println("CASA 22: "+casa.toString());
        System.out.println("DET: "+detCasa.toString());
//        
        //Para el mapa        
//        LatLng coord1 = new LatLng(36.879466, 30.667648);
        String coordenadas=AddressConverter.buscaLocalizacion(casa.getDireccion());
//        String coordenadas=GoogleGeoCode.buscaLocalizacion(casa.getDireccion());
        String[] latitude=new String[2];
        if(coordenadas.equals("")){
            System.out.println("No se encontraron las coordenadas");
            latitude="13.706881, -89.21373179999999".split(",");
        }else{
            System.out.println("Se encontraron las coordenadas: "+coordenadas);
            latitude=coordenadas.split(",");
        }
        
        LatLng coord1=new LatLng(Double.parseDouble(latitude[0]), Double.parseDouble(latitude[1]));
        simpleMapModel=new DefaultMapModel();
        simpleMapModel.addOverlay(new Marker(coord1));
//        simpleMapModel.addOverlay(new Marker(coord1, "Mapaaaaaa"));
        
        reqCon.update(":form:mapa");
        reqCon.execute("dialogShow.show()");
        
    }
    
    
    
    public void presentarDetalleMapa() throws IOException{
        System.out.println("Entro a ver el detalle del mapa con nombre: "+nombreCasaMapa);
        RequestContext reqCon= RequestContext.getCurrentInstance();
        casa=obtImagen.consultarCasaPorFoto(nombreCasaMapa);
        System.out.println("Casa2: "+casa.toString());
        detCasa=obtImagen.consultarDetalleCasa(casa.getIdcasater());
        System.out.println("Detcasa2: "+detCasa.toString());
//        String coordenadas=GoogleGeoCode.buscaLocalizacion(casa.getDireccion());
        String coordenadas=AddressConverter.buscaLocalizacion(casa.getDireccion());
        String[] latitude=new String[2];
        if(coordenadas.equals("")){
            System.out.println("No se encontraron las coordenadas");
            latitude="13.706881, -89.21373179999999".split(",");
        }else{
            System.out.println("Se encontraron las coordenadas: "+coordenadas);
            latitude=coordenadas.split(",");
        }
        
        LatLng coord1=new LatLng(Double.parseDouble(latitude[0]), Double.parseDouble(latitude[1]));
        simpleMapModel=new DefaultMapModel();
        simpleMapModel.addOverlay(new Marker(coord1));
//        simpleMapModel.addOverlay(new Marker(coord1, "Mapaaaaaa"));
        
        reqCon.update(":form:mapa");
        reqCon.execute("dialogShow.show()");
        
    }

    public List<CasaTerrenoVertical> getImages() {
        return images;
    }

    public void setImages(List<CasaTerrenoVertical> images) {
        this.images = images;
    }

    public String getRoot() {
        return root;
    }

    public void setRoot(String root) {
        this.root = root;
    }

    public StreamedContent getStreamImagen() {
        try {

            FacesContext context = FacesContext.getCurrentInstance();
//            if (context.getRenderResponse()) {
            if(context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE){                    
                return new DefaultStreamedContent();
            } else {
                String name = context.getExternalContext().getRequestParameterMap().get("nameImage");
                File imgFile = new File(root + name);
                if(imgFile.isDirectory()){
                    StreamedContent ds = new DefaultStreamedContent();
                    return ds;
                }else{
                    StreamedContent ds = new DefaultStreamedContent(new FileInputStream(imgFile), "image/jpg");
                    return ds;
                }
                
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void setStreamImagen(StreamedContent streamImagen) {
        this.streamImagen = streamImagen;
    }

    public CasaVerticalDataModel getCasaVerDataModel() {
        return casaVerDataModel;
    }

    public void setCasaVerDataModel(CasaVerticalDataModel casaVerDataModel) {
        this.casaVerDataModel = casaVerDataModel;
    }

    public String getRootDet() {
        return rootDet;
    }

    public void setRootDet(String rootDet) {
        this.rootDet = rootDet;
    }

    public CasaTerrenoDet getDetCasa() {
        return detCasa;
    }

    public void setDetCasa(CasaTerrenoDet detCasa) {
        this.detCasa = detCasa;
    }

    public StreamedContent getStreamImagenDet() {
        try {

            FacesContext context = FacesContext.getCurrentInstance();
//            if (context.getRenderResponse()) {
            if(context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE){                    
                return new DefaultStreamedContent();
            } else {
                String name = context.getExternalContext().getRequestParameterMap().get("nombImagenDet");
                System.out.println("Imagen detalle: "+name);
                File imgFile = new File(rootDet + name);
                StreamedContent ds = new DefaultStreamedContent(new FileInputStream(imgFile), "image/jpg");
                return ds;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void setStreamImagenDet(StreamedContent streamImagenDet) {
        this.streamImagenDet = streamImagenDet;
    }

    public CasaTerreno getCasa() {
        return casa;
    }

    public void setCasa(CasaTerreno casa) {
        this.casa = casa;
    }

    public String getCodCasa() {
        return codCasa;
    }

    public void setCodCasa(String codCasa) {
        this.codCasa = codCasa;
    }

 

    public GestionImagenesInter getObtImagen() {
        return obtImagen;
    }

    public void setObtImagen(GestionImagenesInter obtImagen) {
        this.obtImagen = obtImagen;
    }

    public MapModel getSimpleMapModel() {
        return simpleMapModel;
    }

    public void setSimpleMapModel(MapModel simpleMapModel) {
        this.simpleMapModel = simpleMapModel;
    }


    public String getNombreCasaMapa() {
        return nombreCasaMapa;
    }

    public void setNombreCasaMapa(String nombreCasaMapa) {
        this.nombreCasaMapa = nombreCasaMapa;
    }

    public String getDepto() {
        return depto;
    }

    public void setDepto(String depto) {
        this.depto = depto;
    }
    
    
    
}
